package world.snowcrystal.datasource;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import javax.servlet.http.HttpServletRequest;

/**
 * <b>搜索系统</b>数据源接口（新接入的数据源必须实现）
 * 实现类必须按照
 *<p><span style="color:#f00">where data come from</span>+<span style="color:#0ff">data type</span>
 *  +<span>DataSource</span></p>
 *  的命名规则，比如 BingPictureDataSource、BilibiliVideoDataSource SqlUserDataSource
 * @param <T> 数据元素实例类型
 *  @author tianqing
 *  
 */
public interface DataSource<T> {

    /**
     * 搜索
     *
     * @param searchText
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<T> doSearch(String searchText, long pageNum, long pageSize, HttpServletRequest request);


    /**
     * 是否支持对某种数据的搜索，如果该数据源支持对该数据类型的搜索，以及该数据源当前可用
     * 则返回 true，否则返回 false
     * @param dataType 数据类型
     * @see world.snowcrystal.model.enums.SearchTypeEnum
     */
    default boolean support(String dataType) {
        return false;
    }

}
